from django.shortcuts import render

# Create your views here.
from rest_framework.response import Response

from goods.models import SKU
from orders.serializers import OrderSettlementSerializer, OrderCommitSerializer

"""
当用户点击结算的时候，必须让用户登陆
如果是登陆用户，我们直接跳转到结算页面，页面需要获取购物车的信息（选中的商品的信息）


需要登陆用户才能访问
链接redis，获取redis中的数据(选中的商品的信息)
hash   sku_id:count
set    [sku_id, sku_id]
根据商品的id获取商品的信息
使用序列化器对数据进行序列化
返回响应

请求方式　　GET
请求路径　　/orders/places/
请求参数　　无
返回响应　　购物车的商品信息和运费

"""
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated
from django_redis import get_redis_connection


class OrderSettlementView(APIView):
    # 需要登陆用户才能访问
    permission_classes = [IsAuthenticated]

    def get(self, reqeust):
        #  获取当前用户
        user = reqeust.user
        # 链接redis，获取redis中的数据(选中的商品的信息)
        redis_conn = get_redis_connection('carts')
        # hash   sku_id:count
        redis_cart = redis_conn.hgetall('cart_%s' % user.id)
        # set    [sku_id, sku_id]
        redis_selected = redis_conn.smembers('cart_selected_%s' % user.id)
        #  记录用户勾选的商品
        cart_dict = {}
        for sku_id in redis_selected:
            #  二进制类型需要转换成int类型
            cart_dict[int(sku_id)] = int(redis_cart[sku_id])
        # 根据商品的id获取商品的信息
        skus = SKU.objects.filter(id__in=cart_dict.keys())
        #  添加count属性
        for sku in skus:
            sku.count = cart_dict[sku.id]
        # 定义运费
        freight = 10
        # 使用序列化器对数据进行序列化
        serializer = OrderSettlementSerializer({'freight': freight,
                                                'skus': skus})
        # 返回响应
        return Response(serializer.data)


"""

当用户点击提交按钮的时候，前端应该将jwt信息，和收货地址，支付方式传递过来

接收参数
校验参数
保存数据
返回响应

请求方式　post
请求地址　/orders/
请求参数　kwt, 收货地址id,支付方式
返回响应　字典数据
"""
from rest_framework.generics import CreateAPIView


class OrderView(CreateAPIView):
    #  登陆用户才能访问
    permission_classes = [IsAuthenticated]
    serializer_class = OrderCommitSerializer

